﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Cotizav.AccesoDatos
{
    public class DistritoDAO
    {
        public List<Entidades.Distrito> Listar(Util.ContextoDB ctx)
        {
            SqlCommand cmd = new SqlCommand("select * from DISTRITO", ctx.GetConexion(), ctx.GetTx());
            DataTable dtDistrito = new DataTable();
            dtDistrito.Load(cmd.ExecuteReader());

            List<Entidades.Distrito> lista = new List<Entidades.Distrito>();

            foreach(DataRow fila in dtDistrito.Rows)
            {
                Entidades.Distrito d = new Entidades.Distrito();

                d.IdDistrito = Int32.Parse(fila["ID"].ToString());
                d.NombreDistrito = fila["NOMBREDISTRITO"].ToString();
                d.IdProvincia = !(fila["IDPROVINCIA"] is DBNull) ? Int32.Parse(fila["IDPROVINCIA"].ToString()) : new Nullable<int>();
                d.Activo = Int32.Parse(fila["ACTIVO"].ToString());
                d.FechaRegistro = !(fila["FECHAREGISTRO"] is DBNull) ? Convert.ToDateTime(fila["FECHAREGISTRO"].ToString()) : new Nullable<DateTime>();
                d.FechaModificacion = !(fila["FECHAMODIFICACION"] is DBNull) ? Convert.ToDateTime(fila["FECHAMODIFICACION"].ToString()) : new Nullable<DateTime>();
                d.UsuarioRegistro = fila["USUARIOREGISTRO"].ToString();
                d.UsuarioModificacion = fila["USUARIOMODIFICACION"].ToString();

                lista.Add(d);
            }

            return lista;
        }

        public int Eliminar(Util.ContextoDB ctx, Entidades.Distrito selDistrito)
        {
            SqlCommand cmd = new SqlCommand("USP_DISTRITO_ELIMINAR", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", selDistrito.IdDistrito);

            int result = cmd.ExecuteNonQuery();

            return result;
        }

        public int Registrar(Util.ContextoDB ctx, Entidades.Distrito newDistrito)
        {
            SqlCommand cmd = new SqlCommand("USP_DISTRITO_INSERT", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", 0).Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.AddWithValue("@NOMBREDISTRITO", newDistrito.NombreDistrito ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@IDPROVINCIA", newDistrito.IdProvincia.HasValue ? newDistrito.IdProvincia.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ACTIVO", newDistrito.Activo);
            cmd.Parameters.AddWithValue("@FECHAREGISTRO", newDistrito.FechaRegistro ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOREGISTRO", newDistrito.UsuarioRegistro ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();

            int id = Int32.Parse(cmd.Parameters["@ID"].Value.ToString());
            newDistrito.IdDistrito = id;

            return result;
        }

        public int Actualizar(Util.ContextoDB ctx, Entidades.Distrito updDistrito)
        {
            SqlCommand cmd = new SqlCommand("USP_DISTRITO_UPDATE", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", updDistrito.IdDistrito);
            cmd.Parameters.AddWithValue("@NOMBREDISTRITO", updDistrito.NombreDistrito ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@IDPROVINCIA", updDistrito.IdProvincia.HasValue ? updDistrito.IdProvincia.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ACTIVO", updDistrito.Activo);
            cmd.Parameters.AddWithValue("@FECHAMODIFICACION", updDistrito.FechaModificacion ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOMODIFICACION", updDistrito.UsuarioModificacion ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();

            return result;
        }
    }
}
